package com.xxtx.trade.common.enums;

/**
 * 单号生成类型枚举
 *
 * @author xuliang
 * 注：随机号位于流水号之后,流水号使用redis计数据，每天都是一个新的key,长度不足时则自动补0
 * <p>
 * 生成规则 =固定前缀+当天日期串+流水号(redis自增，不足长度则补0)+随机数
 */

public enum FormNoTypeEnum {

	 /**
     * 微信商户单号：
     * 固定前缀：WX
     * 时间格式：yyyyMMdd
     * 流水号长度：6(当单日单据较多时可根据业务适当增加流水号长度)
     * 随机数长度：0
     * 总长度：16
     */
    WX_ORDER("WX", FormNoConstants.SERIAL_YYYYMMDD_PREFIX, 7, 3, 20),


	/**
	 * 微信商户单号：
	 * 固定前缀：WX
	 * 时间格式：yyyyMMdd
	 * 流水号长度：6(当单日单据较多时可根据业务适当增加流水号长度)
	 * 随机数长度：0
	 * 总长度：16
	 */
	PC_ORDER("PC", FormNoConstants.SERIAL_YYYYMMDD_PREFIX, 7, 3, 20),
	OTHR_ORDER("OTHER", FormNoConstants.SERIAL_YYYYMMDD_PREFIX, 7, 3, 20);



    /**
     * 单号前缀
     * 为空时填""
     */
	private String prefix;

    /**
     * 时间格式表达式
     * 例如：yyyyMMdd
     */
    private String datePattern;

    /**
     * 流水号长度
     */
    private Integer serialLength;
    /**
     * 随机数长度
     */
    private Integer randomLength;

    /**
     * 总长度
     */
    private Integer totalLength;


    FormNoTypeEnum(String prefix, String datePattern, Integer serialLength, Integer randomLength, Integer totalLength) {
        this.prefix = prefix;
        this.datePattern = datePattern;
        this.serialLength = serialLength;
        this.randomLength = randomLength;
        this.totalLength = totalLength;
    }


	public String getPrefix() {
		return prefix;
	}


	public void setPrefix(String prefix) {
		this.prefix = prefix;
	}


	public String getDatePattern() {
		return datePattern;
	}


	public void setDatePattern(String datePattern) {
		this.datePattern = datePattern;
	}


	public Integer getSerialLength() {
		return serialLength;
	}


	public void setSerialLength(Integer serialLength) {
		this.serialLength = serialLength;
	}


	public Integer getRandomLength() {
		return randomLength;
	}


	public void setRandomLength(Integer randomLength) {
		this.randomLength = randomLength;
	}


	public Integer getTotalLength() {
		return totalLength;
	}


	public void setTotalLength(Integer totalLength) {
		this.totalLength = totalLength;
	} 

	public static FormNoTypeEnum find(String prefix){
		FormNoTypeEnum[] values = FormNoTypeEnum.values();
		for(FormNoTypeEnum one : values){
			if(prefix.equals(one.getPrefix())){
				return  one;
			}
		}
		return null;
	}
    
}
